package bosque.unc.gui;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Toolkit;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;

import java.awt.Font;

import javax.swing.JOptionPane;
import javax.swing.SwingConstants;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.UIManager;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.border.TitledBorder;

import bosque.unc.ayuda.RampaAyuda;

import java.awt.Color;

public class AjusteRampaAcelGUI extends JFrame {

	private JPanel contentPane;
	private JPanel panelMnopla;
    private JPanel panel;	
	private Integer  valorMinimo;
	private Integer valorMaximo;
	private Integer valorDelay;	
	private JButton btnGrabarValores;
	private JButton btnReset;
	private JButton btnAplicarCambios;
	private JLabel lblDelaycelms;
	private JLabel lblMxAcel;
	private JLabel lblMnAcel;
	private JLabel lblMnDes;
	private JTextField textMinRampaDescCalado;
	private JTextField textDelayRampaDescCalado;
	private JTextField textMaxRampaAscCalado;
    private JTextField textDelayRampaAscCalado;
	private JTextField textMinRampaAscCalado;
	private JTextField textMinRampaManopla;
    private JTextField textMaxRampaManopla;
    private JTextField textDelayRampaManopla;	
	private RampaAyuda rampaAyuda;
	private static Scoba scoba;    
	
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				
				try
				{
					System.out.println("Look and Fell: " + UIManager.getSystemLookAndFeelClassName());
					UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
				}
				catch (Exception ex)
				{
					System.out.println("Failed loading L&F: ");
					System.out.println(ex);
				}
				
				try {
					AjusteRampaAcelGUI frame = new AjusteRampaAcelGUI(scoba);
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public AjusteRampaAcelGUI(Scoba sco) 
	{				
		inicialize(sco);
	}
	
	public void inicialize(Scoba s)
	{
		
		scoba = s;
		setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("resources/speed.png")));
		setTitle("Rampa de Aceleraci\u00F3n");
		setBounds(100, 100, 617, 301);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JLabel lblAjusteDeRampa = new JLabel("Ajuste de Rampa de Aceleraci\u00F3n");
		
		lblAjusteDeRampa.setFont(new Font("Tahoma", Font.PLAIN, 16));
		lblAjusteDeRampa.setBounds(205, 24, 229, 22);
		contentPane.add(lblAjusteDeRampa);

		valorMinimo = scoba.getTelescopio().getRampaValMinManopla();
		valorMaximo= scoba.getTelescopio().getRampaValMaxManopla();
		
		btnReset = new JButton("Reset");
		btnReset.setToolTipText("Carga los valores por defecto");
		btnReset.addActionListener(new ActionListener() 
		{
			public void actionPerformed(ActionEvent arg0) 
			{
				
				// Cargamos valores por defecto
				scoba.getTelescopio().setRampaDelayManopla(100);
				scoba.getTelescopio().setRampaValMinManopla(40);
				scoba.getTelescopio().setRampaValMaxManopla(80);
				
				scoba.getCaladoAutomatico().setRampaDelayAscCalado(800);
				scoba.getCaladoAutomatico().setRampaValMinAscCalado(41);
				scoba.getCaladoAutomatico().setRampaValMaxAscCalado(70);
				scoba.getCaladoAutomatico().setRampaDelayDescCalado(500);
				scoba.getCaladoAutomatico().setRampaValMinDescCalado(45);
				scoba.getManoplaGUI().actualizarValoresSlider();
				
				// mostramos los cambios en los jtextfields
				textMinRampaManopla.setText(scoba.getTelescopio().getRampaValMinManopla().toString());
				textMaxRampaManopla.setText(scoba.getTelescopio().getRampaValMaxManopla().toString());
				textDelayRampaManopla.setText(scoba.getTelescopio().getRampaDelayManopla().toString());
				
				textMinRampaAscCalado.setText(scoba.getCaladoAutomatico().getRampaValMinAscCalado().toString());
				textMaxRampaAscCalado.setText(scoba.getCaladoAutomatico().getRampaValMaxAscCalado().toString());
				textDelayRampaAscCalado.setText(scoba.getCaladoAutomatico().getRampaDelayAscCalado().toString());
				textMinRampaDescCalado.setText(scoba.getCaladoAutomatico().getRampaValMinDescCalado().toString());
				textDelayRampaDescCalado.setText(scoba.getCaladoAutomatico().getRampaDelayDescCalado().toString());
		
			}
		});
		btnReset.setBounds(460, 78, 123, 23);
		contentPane.add(btnReset);
		
		btnGrabarValores = new JButton("Grabar Valores");
		btnGrabarValores.setToolTipText("Guarda los valores en el archivo de configuraci\u00F3n");
		btnGrabarValores.addActionListener(new ActionListener() 
		{
			public void actionPerformed(ActionEvent arg0) 
			{				
					scoba.guardarConfiguracion();
					JOptionPane.showMessageDialog(btnGrabarValores, "Valores Grabados en el archivo exitosamente");				
			}
		});
		btnGrabarValores.setBounds(460, 180, 123, 23);
		contentPane.add(btnGrabarValores);
		
		panelMnopla = new JPanel();
		panelMnopla.setBorder(new TitledBorder(null, "Rampa Manopla", TitledBorder.LEADING, TitledBorder.TOP, null, null));
		panelMnopla.setBounds(10, 67, 209, 113);
		contentPane.add(panelMnopla);
		panelMnopla.setLayout(null);
		
		textMaxRampaManopla = new JTextField();
		textMaxRampaManopla.setHorizontalAlignment(SwingConstants.RIGHT);
		textMaxRampaManopla.setBounds(104, 52, 46, 20);
		panelMnopla.add(textMaxRampaManopla);
		textMaxRampaManopla.setColumns(12);
		textMaxRampaManopla.setText("80");
		soloNumeros(textMaxRampaManopla);
		
		textDelayRampaManopla = new JTextField();
		textDelayRampaManopla.setHorizontalAlignment(SwingConstants.RIGHT);
		textDelayRampaManopla.setText("100");
		textDelayRampaManopla.setBounds(104, 80, 46, 20);
		panelMnopla.add(textDelayRampaManopla);
		textDelayRampaManopla.setColumns(12);
		soloNumeros(textDelayRampaManopla);
		
		JLabel lblDelayms = new JLabel("Delay (ms) :");
		lblDelayms.setBounds(10, 83, 84, 14);
		panelMnopla.add(lblDelayms);
		lblDelayms.setHorizontalAlignment(SwingConstants.RIGHT);
		
		JLabel lblMximo = new JLabel("M\u00E1ximo :");
		lblMximo.setBounds(32, 58, 62, 14);
		panelMnopla.add(lblMximo);
		lblMximo.setToolTipText("Valor maximo de aceleracion del telescopio");
		lblMximo.setHorizontalAlignment(SwingConstants.RIGHT);
		
		JLabel lblMinimo = new JLabel("M\u00EDnimo :");
		lblMinimo.setBounds(32, 27, 62, 14);
		panelMnopla.add(lblMinimo);
		lblMinimo.setToolTipText("Valor minimo de aceleracion del telescopio");
		lblMinimo.setHorizontalAlignment(SwingConstants.RIGHT);
		
		textMinRampaManopla = new JTextField();
		textMinRampaManopla.setHorizontalAlignment(SwingConstants.RIGHT);
		textMinRampaManopla.setBounds(104, 24, 46, 20);
		panelMnopla.add(textMinRampaManopla);
		textMinRampaManopla.setColumns(12);		
		textMinRampaManopla.setText("40");
		
		soloNumeros(textMinRampaManopla);
			
			panel = new JPanel();
			panel.setLayout(null);
			panel.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Rampa Calado Autom\u00E1tico", TitledBorder.LEADING, TitledBorder.TOP, null, null));
			panel.setBounds(229, 67, 209, 183);
			contentPane.add(panel);
			
			textMaxRampaAscCalado = new JTextField();
			textMaxRampaAscCalado.setText("70");
			textMaxRampaAscCalado.setHorizontalAlignment(SwingConstants.RIGHT);
			textMaxRampaAscCalado.setColumns(12);
			textMaxRampaAscCalado.setBounds(109, 52, 46, 20);
			panel.add(textMaxRampaAscCalado);
			
			textDelayRampaAscCalado = new JTextField();
			textDelayRampaAscCalado.setText("800");
			textDelayRampaAscCalado.setHorizontalAlignment(SwingConstants.RIGHT);
			textDelayRampaAscCalado.setColumns(12);
			textDelayRampaAscCalado.setBounds(109, 80, 46, 20);
			panel.add(textDelayRampaAscCalado);
			
			lblDelaycelms = new JLabel("Delay Acel. (ms) :");
			lblDelaycelms.setToolTipText("Delay de la rampa (acelerando) durante el calado");
			lblDelaycelms.setHorizontalAlignment(SwingConstants.RIGHT);
			lblDelaycelms.setBounds(10, 83, 92, 14);
			panel.add(lblDelaycelms);
			
			lblMxAcel = new JLabel("M\u00E1x. Acel. :");
			lblMxAcel.setToolTipText("Valor maximo de aceleraci\u00F3n durante el calado");
			lblMxAcel.setHorizontalAlignment(SwingConstants.RIGHT);
			lblMxAcel.setBounds(32, 58, 69, 14);
			panel.add(lblMxAcel);
			
			lblMnAcel = new JLabel("M\u00EDn. Acel. :");
			lblMnAcel.setToolTipText("Valor minimo de aceleracion durante el Calado");
			lblMnAcel.setHorizontalAlignment(SwingConstants.RIGHT);
			lblMnAcel.setBounds(32, 27, 69, 14);
			panel.add(lblMnAcel);
			
			textMinRampaAscCalado = new JTextField();
			textMinRampaAscCalado.setText("41");
			textMinRampaAscCalado.setHorizontalAlignment(SwingConstants.RIGHT);
			textMinRampaAscCalado.setColumns(12);
			textMinRampaAscCalado.setBounds(109, 24, 46, 20);
			panel.add(textMinRampaAscCalado);
			
			lblMnDes = new JLabel("M\u00EDn. Des. :");
			lblMnDes.setToolTipText("Valor minimo de desaceleracion durante el calado");
			lblMnDes.setHorizontalAlignment(SwingConstants.RIGHT);
			lblMnDes.setBounds(32, 118, 69, 14);
			panel.add(lblMnDes);
			
			textMinRampaDescCalado = new JTextField();
			textMinRampaDescCalado.setText("45");
			textMinRampaDescCalado.setHorizontalAlignment(SwingConstants.RIGHT);
			textMinRampaDescCalado.setColumns(12);
			textMinRampaDescCalado.setBounds(109, 115, 46, 20);
			panel.add(textMinRampaDescCalado);
			
			JLabel lblDelayDesms = new JLabel("Delay Des. (ms) :");
			lblDelayDesms.setToolTipText("Delay de la rampa (desacelerando) durante el calado");
			lblDelayDesms.setHorizontalAlignment(SwingConstants.RIGHT);
			lblDelayDesms.setBounds(10, 146, 92, 14);
			panel.add(lblDelayDesms);
			
			textDelayRampaDescCalado = new JTextField();
			textDelayRampaDescCalado.setText("500");
			textDelayRampaDescCalado.setHorizontalAlignment(SwingConstants.RIGHT);
			textDelayRampaDescCalado.setColumns(12);
			textDelayRampaDescCalado.setBounds(109, 143, 46, 20);
			panel.add(textDelayRampaDescCalado);
			
			JButton btnActualizarValores = new JButton("Actualizar Valores");
			btnActualizarValores.addActionListener(new ActionListener() 
			{
				public void actionPerformed(ActionEvent e) 
				{
					textMinRampaManopla.setText(scoba.getTelescopio().getRampaValMinManopla().toString());
					textMaxRampaManopla.setText(scoba.getTelescopio().getRampaValMaxManopla().toString());
					textDelayRampaManopla.setText(scoba.getTelescopio().getRampaDelayManopla().toString());
					textMinRampaAscCalado.setText(scoba.getCaladoAutomatico().getRampaValMinAscCalado().toString());
					textMaxRampaAscCalado.setText(scoba.getCaladoAutomatico().getRampaValMaxAscCalado().toString());
					textDelayRampaAscCalado.setText(scoba.getCaladoAutomatico().getRampaDelayAscCalado().toString());
					textMinRampaDescCalado.setText(scoba.getCaladoAutomatico().getRampaValMinDescCalado().toString());
					textDelayRampaDescCalado.setText(scoba.getCaladoAutomatico().getRampaDelayDescCalado().toString());
					
				}
			});
			btnActualizarValores.setToolTipText("Carga los valores actuales y los muestra en los Text Fields");
			btnActualizarValores.setBounds(460, 146, 123, 23);
			contentPane.add(btnActualizarValores);
			
			btnAplicarCambios = new JButton("Aplicar Cambios");
			btnAplicarCambios.addActionListener(new ActionListener() 
			{
				public void actionPerformed(ActionEvent arg0) 
				{					
					if(textMinRampaManopla.getText().trim().length()==0)
					 {
					    JOptionPane.showMessageDialog(btnGrabarValores, "Debe ingresar un Minimo");   					
					 }
					else if(textMaxRampaManopla.getText().trim().length()==0)
					{
						JOptionPane.showMessageDialog(btnGrabarValores, "Debe ingresar un Maximo"); 
					}	
					else if(textDelayRampaManopla.getText().trim().length()==0)
					{
						JOptionPane.showMessageDialog(btnGrabarValores, "Debe ingresar un Delay"); 
					}
					else if(textDelayRampaAscCalado.getText().trim().length()==0)
					{
						JOptionPane.showMessageDialog(btnGrabarValores, "Debe ingresar un Maximo"); 
					}	
					else if(textMinRampaAscCalado.getText().trim().length()==0)
					{
						JOptionPane.showMessageDialog(btnGrabarValores, "Debe ingresar un Delay"); 
					}
					else if(textMaxRampaAscCalado.getText().trim().length()==0)
					{
						JOptionPane.showMessageDialog(btnGrabarValores, "Debe ingresar un Maximo"); 
					}	
					else if(textDelayRampaDescCalado.getText().trim().length()==0)
					{
						JOptionPane.showMessageDialog(btnGrabarValores, "Debe ingresar un Delay"); 
					}
					else if(textMinRampaDescCalado.getText().trim().length()==0)
					{
						JOptionPane.showMessageDialog(btnGrabarValores, "Debe ingresar un Maximo"); 
					}	
					
					else
					{
						scoba.getTelescopio().setRampaDelayManopla(Integer.parseInt(textDelayRampaManopla.getText().toString()));
						scoba.getTelescopio().setRampaValMinManopla(Integer.parseInt(textMinRampaManopla.getText().toString()));
						scoba.getTelescopio().setRampaValMaxManopla(Integer.parseInt(textMaxRampaManopla.getText().toString()));
						
						scoba.getCaladoAutomatico().setRampaDelayAscCalado(Integer.parseInt(textDelayRampaAscCalado.getText().toString()));
						scoba.getCaladoAutomatico().setRampaValMinAscCalado(Integer.parseInt(textMinRampaAscCalado.getText().toString()));
						scoba.getCaladoAutomatico().setRampaValMaxAscCalado(Integer.parseInt(textMaxRampaAscCalado.getText().toString()));
						scoba.getCaladoAutomatico().setRampaDelayDescCalado(Integer.parseInt(textDelayRampaDescCalado.getText().toString()));
						scoba.getCaladoAutomatico().setRampaValMinDescCalado(Integer.parseInt(textMinRampaDescCalado.getText().toString()));
						System.out.println(scoba.getTelescopio().getRampaValMaxManopla());
						scoba.getManoplaGUI().actualizarValoresSlider();
					}			
				}
			});
			btnAplicarCambios.setToolTipText("Aplica los cambios seteados");
			btnAplicarCambios.setBounds(460, 112, 123, 23);
			contentPane.add(btnAplicarCambios);
			
			soloNumeros(textDelayRampaAscCalado);
			soloNumeros(textMinRampaAscCalado);
			soloNumeros(textMaxRampaAscCalado);
			soloNumeros(textDelayRampaDescCalado);
			soloNumeros(textMinRampaDescCalado);
			
			JButton btnAyuda = new JButton("?");
			btnAyuda.addActionListener(new ActionListener() 
			{
				public void actionPerformed(ActionEvent e) 
				{					
					try
					{
						if(!rampaAyuda.isVisible())
							{						
							rampaAyuda.setVisible(true);
							}
						else{
							rampaAyuda.requestFocus();
							rampaAyuda.setExtendedState(JFrame.NORMAL);
							}
					}
					catch(Exception e1)
					{
						rampaAyuda = new RampaAyuda();				
						rampaAyuda.setVisible(true);
					}
					
				}
			});
			btnAyuda.setForeground(Color.BLUE);
			btnAyuda.setBackground(Color.BLUE);
			btnAyuda.setBounds(546, 24, 37, 23);
			contentPane.add(btnAyuda);
	
	}
	
	/**
	 * @param a
	 * Metodo para validar los textField 
	 */
	public void soloNumeros(JTextField a)
	{		
		a.addKeyListener(new KeyAdapter()
		{		
			public void keyTyped(KeyEvent e) 
			{				
				char c = e.getKeyChar();
				if(Character.isLetter(c)){
					
					getToolkit().beep();
					e.consume(); // que no te permita ingresar letras
				}
			}
		
		});
	}
	
 
	
	
	
	/*Getters y Setters*/	
	
public JTextField getTextMin() {
		return textMinRampaManopla;
	}

	public void setTextMin(JTextField textMin) {
		this.textMinRampaManopla = textMin;
	}

	public JTextField getTextMax() {
		return textMaxRampaManopla;
	}

	public void setTextMax(JTextField textMax) {
		this.textMaxRampaManopla = textMax;
	}

	public JTextField getTextDelay() {
		return textDelayRampaManopla;
	}

	public void setTextDelay(JTextField textDelay) {
		this.textDelayRampaManopla = textDelay;
	}

	public Integer getValorMinimo() {
		return valorMinimo;
	}

	public void setValorMinimo(Integer valorMinimo) {
		this.valorMinimo = valorMinimo;
	}

	public Integer getValorMaximo() {
		return valorMaximo;
	}

	public void setValorMaximo(Integer valorMaximo) {
		this.valorMaximo = valorMaximo;
	}

	public Integer getValorDelay() {
		return valorDelay;
	}

	public void setValorDelay(Integer valorDelay) {
		this.valorDelay = valorDelay;
	}
	
	/**
	 * Metodo que actuliza los valores de los textfield
	 */
	public void actualizarValoresJTextFields()
	{
		textMinRampaManopla.setText(scoba.getTelescopio().getRampaValMinManopla().toString());
		textMaxRampaManopla.setText(scoba.getTelescopio().getRampaValMaxManopla().toString());
		textDelayRampaManopla.setText(scoba.getTelescopio().getRampaDelayManopla().toString());
		
		textMinRampaAscCalado.setText(scoba.getCaladoAutomatico().getRampaValMinAscCalado().toString());
		textMaxRampaAscCalado.setText(scoba.getCaladoAutomatico().getRampaValMaxAscCalado().toString());
		textDelayRampaAscCalado.setText(scoba.getCaladoAutomatico().getRampaDelayAscCalado().toString());
		textMinRampaDescCalado.setText(scoba.getCaladoAutomatico().getRampaValMinDescCalado().toString());
		textDelayRampaDescCalado.setText(scoba.getCaladoAutomatico().getRampaDelayDescCalado().toString());
	}
}
